package com.example.usermanager.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import org.springframework.util.StringUtils;

/**
 * 密码的工具类
 * 1、加密
 * 2、解密（加密一样的流程走一下，然后对比）
 */
public class PasswordUtil {
    /**
     * 加密
     * @param password
     * @return
     */
    public static String encrypt(String password){
        //每次调用本方法随机生成盐值
        String salt = IdUtil.simpleUUID();
        //给盐值和密码加起来一起md5
        String finalPassword = SecureUtil.md5(salt + password);
        //返回盐值&（盐值和密码）md5的结果
        return salt + "$" + finalPassword;
    }

    /**
     * 解密
     * @param password  前端用户输入的要比较的密码
     * @param securePassword  数据库里存的盐值&（盐值+密码）md5的结果
     * @return
     */
    public static boolean decrypt(String password , String securePassword){
        boolean result = false;
        if(StringUtils.hasLength(password) && StringUtils.hasLength(securePassword)){
            if(securePassword.length() == 65 && securePassword.contains("$")){
                //分隔符分隔
                String[] securePasswordArr = securePassword.split("\\$");
                String salt = securePasswordArr[0];  //盐值
                String finalPassword = securePasswordArr[1];  //（盐值+密码）md5
                password = SecureUtil.md5((salt + password));  //盐值+当前密码再md5的出来的结果
                if(finalPassword.equals(password)){  //和数据库里的对比
                    result = true;
                }
            }
        }
        return  result;
    }

    public static void main(String[] args) {
        String password = "666666";
        String securePassword = PasswordUtil.encrypt(password);
        System.out.println(securePassword);
        password = "123456";
        System.out.println(decrypt(password , securePassword));
    }
}
